/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package ant;
import Others.EchiquierE;
import java.awt.Color;
import java.awt.Point;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Roi extends Piece implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
public Roi(){}
public Roi(int x, int y, Color color){
super(x, y, color);
}
@Override
public boolean isAt(int x, int y){
return (x == getPosX() && y == getPosY());
}
@Override
public String getNom(){
return "Roi";
}
@Override
public String getFileName(){
if(color.getRGB() == Color.WHITE.getRGB()){
return "roiBlanc";
}else{
return "roiNoir";
}
}
public boolean isOnEchec(EchiquierE[][] plateau, Color color){
System.err.println("isOnEchec");
boolean retour = false;
if(!retour){
retour = checkEchecDiagonale(plateau, color);
}
if(!retour){
retour = checkEchecHorizontal(plateau, color);
}
if(!retour){
retour = checkEchecVertical(plateau, color);
}
if(!retour){
retour = checkEchecCavalier(plateau, color);
}
return retour;
}
public boolean isOnEchecEtMat(EchiquierE[][] plateau, Color color){
if(checkEchecDiagonale(plateau, color) || checkEchecHorizontal(plateau, color) || checkEchecVertical(plateau, color) || checkEchecCavalier(plateau, color)){
return true;
}else{
return false;
}
}
private boolean checkEchecDiagonale(EchiquierE[][] plateau, Color color) {
System.err.println("checkEchecDiagonale");
int i = this.x;
int j = this.y;
while(i >= 0 && j >= 0){
System.err.println("x: "+x+" y: "+y+" i: "+i+" j:" + j);
Piece piece = plateau[i][j].getPiece();
if(piece != null){
System.err.println("piece not null");
if(piece.getNom().equalsIgnoreCase("Fou") && piece.getColor().getRGB() != color.getRGB()){
System.err.println("Fou1");
return true;
}else if(piece.getNom().equalsIgnoreCase("Reine") && piece.getColor().getRGB() != color.getRGB()){
System.err.println("Reine1");
return true;
}else{
return false;
}
}
i--;
j--;
}
i = this.x;
j = this.y;
while(i <= 7 && j <= 7){
System.err.println("x: "+x+" y: "+y+" i: "+i+" j:" + j);
Piece piece = plateau[i][j].getPiece();
if(piece != null){
System.err.println("piece not null");
if(piece.getNom().equalsIgnoreCase("Fou") && piece.getColor().getRGB() != color.getRGB()){
System.err.println("Fou2");
return true;
}else if(piece.getNom().equalsIgnoreCase("Reine") && piece.getColor().getRGB() != color.getRGB()){
System.err.println("Reine2");
return true;
}else{
return false;
}
}
i++;
j++;
}
i = this.x;
j = this.y;
while(i <= 7 && j >= 0){
System.err.println("x: "+x+" y: "+y+" i: "+i+" j:" + j);
Piece piece = plateau[i][j].getPiece();
if(piece != null){
System.err.println("piece not null");
if(piece.getNom().equalsIgnoreCase("Fou") && piece.getColor().getRGB() != color.getRGB()){
System.err.println("Fou3");
return true;
}else if(piece.getNom().equalsIgnoreCase("Reine") && piece.getColor().getRGB() != color.getRGB()){
System.err.println("Reine3");
return true;
}else{
return false;
}
}
i++;
j--;
}
i = this.x;
j = this.y;
while(i >= 0 && j <= 7){
Piece piece = plateau[i][j].getPiece();
if(piece != null){
System.err.println("piece not null");
if(piece.getNom().equalsIgnoreCase("Fou") && piece.getColor().getRGB() != color.getRGB()){
System.err.println("Fou4");
return true;
}else if(piece.getNom().equalsIgnoreCase("Reine") && piece.getColor().getRGB() != color.getRGB()){
System.err.println("Reine4");
return true;
}else{
return false;
}
}
i--;
j++;
}
return false;
}
private boolean checkEchecHorizontal(EchiquierE[][] plateau, Color color) {
System.err.println("checkEchecHorizontal");
for(int i = this.x; i <= 7; i++){
Piece piece = plateau[i][this.y].getPiece();
if(piece != null){
System.err.println("piece not null");
if(piece.getNom().equalsIgnoreCase("Tour") && piece.getColor().getRGB() != color.getRGB()){
return true;
}else if(piece.getNom().equalsIgnoreCase("Reine") && piece.getColor().getRGB() != color.getRGB()){
return true;
}else{
return false;
}
}
}
for(int i = this.x; i >= 0; i--){
Piece piece = plateau[i][this.y].getPiece();
if(piece != null){
System.err.println("piece not null");
if(piece.getNom().equalsIgnoreCase("Tour") && piece.getColor().getRGB() != color.getRGB()){
return true;
}else if(piece.getNom().equalsIgnoreCase("Reine") && piece.getColor().getRGB() != color.getRGB()){
return true;
}else{
return false;
}
}
}
return false;
}
private boolean checkEchecVertical(EchiquierE[][] plateau, Color color) {
System.err.println("checkEchecVertical");
for(int i = this.y; i <= 7; i++){
Piece piece = plateau[this.x][i].getPiece();
if(piece != null){
System.err.println("piece not null");
if(piece.getNom().equalsIgnoreCase("Tour") && piece.getColor().getRGB() != color.getRGB()){
return true;
}else if(piece.getNom().equalsIgnoreCase("Reine") && piece.getColor().getRGB() != color.getRGB()){
return true;
}else{
return false;
}
}
}
for(int i = this.y; i >= 0; i--){
Piece piece = plateau[this.x][i].getPiece();
if(piece != null){
System.err.println("piece not null");
if(piece.getNom().equalsIgnoreCase("Tour") && piece.getColor().getRGB() != color.getRGB()){
return true;
}else if(piece.getNom().equalsIgnoreCase("Reine") && piece.getColor().getRGB() != color.getRGB()){
return true;
}else{
return false;
}
}
}
return false;
}
private boolean checkEchecCavalier(EchiquierE[][] plateau, Color color) {
System.err.println("checkEchecCavalier");
Piece piece = null;
int i = this.x-2;
int j = this.y-1;
System.err.println("1) x: "+x+" y: "+y+" i: "+i+" j:" + j);
if(i>=0 && i<=7 && j>=0 && j<=7){
piece = plateau[i][j].getPiece();
if(piece != null){
System.err.println("piece not null 1");
System.err.println("nom: " + piece.getNom());
if(piece.getNom().equalsIgnoreCase("Cavalier") && piece.getColor().getRGB() != color.getRGB()){
return true;
}
}
}
i = this.x-2;
j = this.y+1;
System.err.println("2) x: "+x+" y: "+y+" i: "+i+" j:" + j);
if(i>=0 && i<=7 && j>=0 && j<=7){
piece = plateau[i][j].getPiece();
if(piece != null){
System.err.println("piece not null 2");
System.err.println("nom: " + piece.getNom());
if(piece.getNom().equalsIgnoreCase("Cavalier") && piece.getColor().getRGB() != color.getRGB()){
return true;
}
}
}
i = this.x+2;
j = this.y-1;
System.err.println("3) x: "+x+" y: "+y+" i: "+i+" j:" + j);
if(i>=0 && i<=7 && j>=0 && j<=7){
piece = plateau[i][j].getPiece();
if(piece != null){
System.err.println("piece not null 3");
System.err.println("nom: " + piece.getNom());
if(piece.getNom().equalsIgnoreCase("Cavalier") && piece.getColor().getRGB() != color.getRGB()){
return true;
}
}
}
i = this.x+2;
j = this.y+1;
System.err.println("4) x: "+x+" y: "+y+" i: "+i+" j:" + j);
if(i>=0 && i<=7 && j>=0 && j<=7){
piece = plateau[i][j].getPiece();
System.err.println("x: "+x+" y: "+y+" i: "+i+" j:" + j);
if(piece != null){
System.err.println("piece not null 4");
System.err.println("nom: " + piece.getNom());
if(piece.getNom().equalsIgnoreCase("Cavalier") && piece.getColor().getRGB() != color.getRGB()){
return true;
}
}
}
i = this.x-1;
j = this.y-2;
System.err.println("5) x: "+x+" y: "+y+" i: "+i+" j:" + j);
if(i>=0 && i<=7 && j>=0 && j<=7){
piece = plateau[i][j].getPiece();
if(piece != null){
System.err.println("piece not null 5");
System.err.println("nom: " + piece.getNom());
if(piece.getNom().equalsIgnoreCase("Cavalier") && piece.getColor().getRGB() != color.getRGB()){
return true;
}
}
}
i = this.x-1;
j = this.y+2;
System.err.println("6) x: "+x+" y: "+y+" i: "+i+" j:" + j);
if(i>=0 && i<=7 && j>=0 && j<=7){
piece = plateau[i][j].getPiece();
if(piece != null){
System.err.println("piece not null 6");
System.err.println("nom: " + piece.getNom());
if(piece.getNom().equalsIgnoreCase("Cavalier") && piece.getColor().getRGB() != color.getRGB()){
return true;
}
}
}
i = this.x+1;
j = this.y-2;
if(i>=0 && i<=7 && j>=0 && j<=7){
piece = plateau[i][j].getPiece();
if(piece != null){
System.err.println("piece not null 7");
System.err.println("nom: " + piece.getNom());
if(piece.getNom().equalsIgnoreCase("Cavalier") && piece.getColor().getRGB() != color.getRGB()){
return true;
}
}
}
i = this.x+1;
j = this.y+2;
if(i>=0 && i<=7 && j>=0 && j<=7){
piece = plateau[i][j].getPiece();
if(piece != null){
System.err.println("piece not null 8");
System.err.println("nom: " + piece.getNom());
if(piece.getNom().equalsIgnoreCase("Cavalier") && piece.getColor().getRGB() != color.getRGB()){
return true;
}
}
}
return false;
}
@Override
public List<Point> getDeplacementPossible(EchiquierE[][] plateau){
List<Point> listePoint = new ArrayList<>();
this.addPoint(this.x-1, this.y-1, listePoint, plateau);
this.addPoint(this.x-1, this.y+1, listePoint, plateau);
this.addPoint(this.x+1, this.y-1, listePoint, plateau);
this.addPoint(this.x+1, this.y+1, listePoint, plateau);
this.addPoint(this.x-1, this.y, listePoint, plateau);
this.addPoint(this.x+1, this.y, listePoint, plateau);
this.addPoint(this.x, this.y-1, listePoint, plateau);
this.addPoint(this.x, this.y+1, listePoint, plateau);
return listePoint;
}
private void addPoint(int newX, int newY, List<Point> points, EchiquierE[][] plateau) {
boolean colision = false;
Piece pion = null;
if(newX >= 0 && newX <=7 && newY >=0 && newY <= 7){
pion = plateau[newX][newY].getPiece();
}
if(pion != null){
if(pion.getColor().getRGB() == getColor().getRGB()){
colision = true;
}
if(newX >= 0 && newX <=7 && newY >=0 && newY <= 7 && !colision){
points.add(new Point(newX, newY));
}
}else{
if(newX >= 0 && newX <=7 && newY >=0 && newY <= 7 && !colision){
points.add(new Point(newX, newY));
}
}
}
@Override
public int hashCode(){
return (id != null ? id.hashCode() : 0);
}
@Override
public boolean equals(Object obj){
if(!(obj instanceof Roi)){
return false;
}
Roi other = (Roi)obj;
if(this.id.equals(other.id)){
return true;
}
return false;
}
@Override
public String toString(){
return "Entity.Pion, id: " + id;
}
}